Apache Commons IO লাইব্রেরি ফাইল কমপ্রেশন এবং ডি-কমপ্রেশন (compression and decompression) কাজগুলির জন্য সরাসরি ইউটিলিটি ক্লাস সরবরাহ করে না, তবে Apache Commons Compress লাইব্রেরি ব্যবহার করে আপনি ফাইল কমপ্রেশন এবং ডি-কমপ্রেশন করতে পারবেন। Apache Commons Compress হল একটি আলাদা লাইব্রেরি যা Apache Commons IO এর সাথে একত্রে ব্যবহার করা যেতে পারে এবং এটি বিভিন্ন ধরনের কমপ্রেশন ফরম্যাট (যেমন ZIP, GZIP, TAR, BZIP2) এর সাথে কাজ করার জন্য অনেক শক্তিশালী এবং সহজ ইউটিলিটি প্রদান করে।
এখানে, আমরা দেখব কিভাবে Apache Commons Compress লাইব্রেরি ব্যবহার করে File Compression এবং Decompression কাজ করা যায়।
প্রথমে, আপনাকে Apache Commons Compress লাইব্রেরিটি আপনার প্রোজেক্টে অন্তর্ভুক্ত করতে হবে। আপনি Maven বা Gradle এর মাধ্যমে এটি ইন্সটল করতে পারেন।
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.21</version> <!-- সর্বশেষ ভার্সন চেক করুন -->
</dependency>
</dependencies>
dependencies {
implementation 'org.apache.commons:commons-compress:1.21' // সর্বশেষ ভার্সন চেক করুন
}
আপনি যদি JAR ফাইল ডাউনলোড করতে চান, তবে Apache Commons Compress ডাউনলোড পৃষ্ঠা থেকে এটি ডাউনলোড করতে পারবেন।
Apache Commons Compress লাইব্রেরি ব্যবহার করে আপনি সহজেই ফাইল কমপ্রেশন করতে পারবেন। এখানে আমরা GZIP এবং ZIP ফাইল ফরম্যাটের মাধ্যমে ফাইল কমপ্রেশন দেখাব।
GZIP কমপ্রেশন ব্যবহার করে একটি ফাইল কমপ্রেস করার উদাহরণ:
import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream;
import org.apache.commons.compress.utils.IOUtils;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class GzipCompressionExample {
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
GzipCompressorOutputStream gzipOut = null;
try {
// Create FileInputStream for the source file
fis = new FileInputStream("example.txt");
fos = new FileOutputStream("example.txt.gz");
// Create GzipCompressorOutputStream for compression
gzipOut = new GzipCompressorOutputStream(fos);
// Copy the file content to the GZIP output stream
IOUtils.copy(fis, gzipOut);
System.out.println("File successfully compressed to example.txt.gz");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) fis.close();
if (gzipOut != null) gzipOut.close();
if (fos != null) fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
এখানে:
ZIP ফাইলের মাধ্যমে একটি ডিরেক্টরি কমপ্রেস করার উদাহরণ:
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ZipCompressionExample {
public static void main(String[] args) {
File dirToCompress = new File("myDirectory");
File zipFile = new File("myDirectory.zip");
try (ZipArchiveOutputStream zipOut = new ZipArchiveOutputStream(new FileOutputStream(zipFile))) {
// Recursively compress all files in the directory
for (File file : dirToCompress.listFiles()) {
if (file.isFile()) {
FileInputStream fis = new FileInputStream(file);
ZipArchiveEntry entry = new ZipArchiveEntry(file.getName());
zipOut.putArchiveEntry(entry);
IOUtils.copy(fis, zipOut);
zipOut.closeArchiveEntry();
fis.close();
}
}
System.out.println("Directory compressed into ZIP file successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
এখানে:
ফাইল ডিকমপ্রেশন করার জন্য আপনি Apache Commons Compress লাইব্রেরির GzipCompressorInputStream এবং ZipArchiveInputStream ব্যবহার করতে পারেন।
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
import org.apache.commons.compress.utils.IOUtils;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class GzipDecompressionExample {
public static void main(String[] args) {
FileInputStream fis = null;
GzipCompressorInputStream gzipIn = null;
FileOutputStream fos = null;
try {
// Create FileInputStream for the compressed file
fis = new FileInputStream("example.txt.gz");
gzipIn = new GzipCompressorInputStream(fis);
// Create FileOutputStream for the decompressed file
fos = new FileOutputStream("example.txt");
// Decompress the file content
IOUtils.copy(gzipIn, fos);
System.out.println("File successfully decompressed to example.txt");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) fis.close();
if (gzipIn != null) gzipIn.close();
if (fos != null) fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
এখানে:
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ZipDecompressionExample {
public static void main(String[] args) {
File zipFile = new File("myDirectory.zip");
try (ZipArchiveInputStream zipIn = new ZipArchiveInputStream(new FileInputStream(zipFile))) {
ZipArchiveEntry entry;
// Iterate through each entry in the ZIP file
while ((entry = zipIn.getNextZipEntry()) != null) {
File outFile = new File("extractedFiles", entry.getName());
try (FileOutputStream fos = new FileOutputStream(outFile)) {
IOUtils.copy(zipIn, fos);
}
}
System.out.println("ZIP file decompressed successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
এখানে:
কমপ্রেশন এবং ডিকমপ্রেশন কাজ করার সময় কিছু সাধারণ সমস্যা বা এক্সসেপশন হতে পারে, যেমন:
এজন্য try-catch ব্লক ব্যবহার করে এ ধরনের এক্সসেপশন হ্যান্ডলিং করা উচিত।
try {
FileUtils.copyFile(sourceFile, destFile);
} catch (IOException e) {
System.err.println("Error during file compression: " + e.getMessage());
e.printStackTrace();
}
Apache Commons Compress লাইব্রেরি ব্যবহার করে আপনি file compression এবং decompression খুব সহজভাবে করতে পারেন। এটি বিভিন্ন কমপ্রেশন ফরম্যাট যেমন GZIP, ZIP, TAR, BZIP2 সমর্থন করে এবং GzipCompressorOutputStream, ZipArchiveOutputStream, GzipCompressorInputStream, এবং ZipArchiveInputStream এর মতো ক্লাসের মাধ্যমে এই কার্যক্রমগুলোকে সহজ এবং কার্যকরী করে তোলে।
Apache Commons IO লাইব্রেরি ফাইল কমপ্রেস (Compress) এবং ডিকমপ্রেস (Decompress) করার জন্য শক্তিশালী ফিচার প্রদান করে। আপনি সহজেই ZIP এবং GZIP ফাইল কমপ্রেস এবং ডিকমপ্রেস করতে পারেন Commons Compress লাইব্রেরির মাধ্যমে, যা Apache Commons IO এর একটি অংশ। এতে ফাইলের সাইজ ছোট করার জন্য কমপ্রেস করা এবং প্রয়োজনের সময় ফাইলের কনটেন্ট বের করার জন্য ডিকমপ্রেস করা সহজ হয়ে যায়।
এখানে আমরা দেখব ZIP এবং GZIP ফাইল কমপ্রেস এবং ডিকমপ্রেস করার উদাহরণ।
ZIP ফাইল কমপ্রেস এবং ডিকমপ্রেস করার জন্য আমরা Apache Commons Compress লাইব্রেরি ব্যবহার করতে পারি। এটি ZipFile, ZipOutputStream, এবং অন্যান্য ক্লাস সরবরাহ করে যা আপনাকে ZIP ফাইল তৈরি এবং খুলতে সাহায্য করে।
একটি ফাইল বা ডিরেক্টরিকে ZIP ফাইল আকারে কমপ্রেস করতে ZipOutputStream ব্যবহার করা হয়।
উদাহরণ: ZIP ফাইল কমপ্রেস করা
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipFileCompressExample {
public static void main(String[] args) {
File sourceFile = new File("example.txt");
File zipFile = new File("example.zip");
try (FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zipOut = new ZipOutputStream(fos);
FileInputStream fis = new FileInputStream(sourceFile)) {
// ZIP ফাইল তৈরি করা এবং ফাইল যোগ করা
ZipEntry zipEntry = new ZipEntry(sourceFile.getName());
zipOut.putNextEntry(zipEntry);
// ফাইল কনটেন্ট যোগ করা
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
zipOut.write(buffer, 0, length);
}
System.out.println("File compressed successfully into ZIP!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
আউটপুট:
File compressed successfully into ZIP!
এখানে:
একটি ZIP ফাইলের কনটেন্ট পড়তে ZipFile ক্লাস ব্যবহার করা হয়। এটি ZIP ফাইল থেকে নির্দিষ্ট ফাইল বের করতে সাহায্য করে।
উদাহরণ: ZIP ফাইল ডিকমপ্রেস করা
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.io.FileInputStream;
public class ZipFileDecompressExample {
public static void main(String[] args) {
File zipFile = new File("example.zip");
File outputDir = new File("outputDir");
try (ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFile))) {
ZipEntry entry;
while ((entry = zipIn.getNextEntry()) != null) {
File outputFile = new File(outputDir, entry.getName());
try (FileOutputStream fos = new FileOutputStream(outputFile)) {
byte[] buffer = new byte[1024];
int length;
while ((length = zipIn.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
}
zipIn.closeEntry();
}
System.out.println("ZIP file extracted successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
আউটপুট:
ZIP file extracted successfully!
এখানে:
GZIP ফাইল কমপ্রেস এবং ডিকমপ্রেস করার জন্য আমরা GZIPOutputStream এবং GZIPInputStream ব্যবহার করি।
GZIP ফাইল কমপ্রেস করতে GZIPOutputStream ক্লাস ব্যবহার করা হয়।
উদাহরণ: GZIP ফাইল কমপ্রেস করা
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;
public class GzipCompressExample {
public static void main(String[] args) {
File sourceFile = new File("example.txt");
File gzippedFile = new File("example.txt.gz");
try (FileInputStream fis = new FileInputStream(sourceFile);
FileOutputStream fos = new FileOutputStream(gzippedFile);
GZIPOutputStream gzipOut = new GZIPOutputStream(fos)) {
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
gzipOut.write(buffer, 0, length);
}
System.out.println("File compressed successfully into GZIP!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
আউটপুট:
File compressed successfully into GZIP!
এখানে:
GZIP ফাইল থেকে ডেটা পড়তে GZIPInputStream ব্যবহার করা হয়।
উদাহরণ: GZIP ফাইল ডিকমপ্রেস করা
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.FileInputStream;
import java.io.BufferedReader;
import java.util.zip.GZIPInputStream;
public class GzipDecompressExample {
public static void main(String[] args) {
File gzippedFile = new File("example.txt.gz");
File outputFile = new File("output_example.txt");
try (GZIPInputStream gzipIn = new GZIPInputStream(new FileInputStream(gzippedFile));
FileOutputStream fos = new FileOutputStream(outputFile);
BufferedReader reader = new BufferedReader(new InputStreamReader(gzipIn))) {
String line;
while ((line = reader.readLine()) != null) {
fos.write(line.getBytes());
fos.write("\n".getBytes());
}
System.out.println("GZIP file decompressed successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
আউটপুট:
GZIP file decompressed successfully!
এখানে:
এই উপায়গুলির মাধ্যমে আপনি Apache Commons IO লাইব্রেরি ব্যবহার করে ফাইল কমপ্রেস এবং ডিকমপ্রেস করার কাজ দ্রুত এবং সহজে করতে পারবেন।
ফাইল কমপ্রেশন (File Compression) এমন একটি প্রক্রিয়া যার মাধ্যমে ফাইলের আকার কমানো হয়, যাতে এটি আরও সঞ্চয়যোগ্য এবং দ্রুত স্থানান্তরযোগ্য হয়। অ্যাপাচি কমন্স আইও (Apache Commons IO) লাইব্রেরি সরাসরি ফাইল কমপ্রেশন সমর্থন না করলেও, এটি ফাইলের সাথে কাজ করার জন্য ইউটিলিটি মেথড সরবরাহ করে। আপনি FileUtils
এবং IOUtils
এর সাহায্যে ফাইল কমপ্রেশন করতে পারবেন, তবে অ্যাপাচি কমন্স Compression
লাইব্রেরি বা জাভার স্ট্যান্ডার্ড java.util.zip
লাইব্রেরি ব্যবহার করাও উপকারী হতে পারে।
এই টিউটোরিয়ালে আমরা দেখব কিভাবে FileUtils
এবং IOUtils
ব্যবহার করে ফাইল কমপ্রেশন করতে হবে।
যদিও Apache Commons IO সরাসরি ফাইল কমপ্রেশন হ্যান্ডল করতে পারে না, তবে আপনি FileUtils
ক্লাস ব্যবহার করে ফাইলের কনটেন্ট সহজেই পড়তে এবং লেখতে পারেন, যা Java's java.util.zip
প্যাকেজের সাথে মিলে ফাইল কমপ্রেশন করতে সহায়ক।
.zip
ফাইল তৈরি করা (Java ZipStream এর সাথে)import org.apache.commons.io.FileUtils;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class FileCompressionExample {
public static void main(String[] args) {
// ইনপুট ফাইল এবং আউটপুট জিপ ফাইলের পাথ
File inputFile = new File("example.txt");
File zipFile = new File("example.zip");
try (FileInputStream fis = new FileInputStream(inputFile);
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zipOut = new ZipOutputStream(fos)) {
// জিপ এন্ট্রি তৈরি করা
ZipEntry zipEntry = new ZipEntry(inputFile.getName());
zipOut.putNextEntry(zipEntry);
// ফাইল থেকে ডেটা পড়া এবং জিপ ফাইলে লেখা
IOUtils.copy(fis, zipOut);
// জিপ ফাইলের লেখার শেষ
zipOut.closeEntry();
System.out.println("File compressed successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
.zip
ফাইল তৈরি করা হয়েছে।IOUtils.copy(fis, zipOut)
এই মেথডটি ইনপুট ফাইল থেকে ডেটা পড়ে এবং আউটপুট জিপ ফাইলে লেখে।IOUtils ক্লাসটি ইনপুট এবং আউটপুট স্ট্রিমের জন্য একটি কার্যকরী ইউটিলিটি সরবরাহ করে, যা কমপ্রেশন (Compression) এবং এক্সট্রাকশন (Extraction) কাজগুলো সহজ করে।
.gz
ফাইল কমপ্রেশন (gzip ব্যবহার)import org.apache.commons.io.IOUtils;
import java.io.*;
import java.util.zip.GZIPOutputStream;
public class GzipCompressionExample {
public static void main(String[] args) {
// ইনপুট ফাইল এবং আউটপুট GZIP ফাইলের পাথ
File inputFile = new File("example.txt");
File gzipFile = new File("example.gz");
try (FileInputStream fis = new FileInputStream(inputFile);
FileOutputStream fos = new FileOutputStream(gzipFile);
GZIPOutputStream gzipOut = new GZIPOutputStream(fos)) {
// GZIP আউটপুট স্ট্রিমে ইনপুট ফাইলের ডেটা কপি করা
IOUtils.copy(fis, gzipOut);
System.out.println("File compressed to GZIP format successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
.gz
ফাইল তৈরি করা হচ্ছে।IOUtils.copy(fis, gzipOut)
মেথডটি ইনপুট ফাইল থেকে ডেটা পড়ে এবং আউটপুট GZIP ফাইলে লেখে।GZIPOutputStream
একটি স্ট্যান্ডার্ড জাভা ক্লাস যা ফাইল কমপ্রেশন করতে সাহায্য করে, তবে Apache Commons IO's IOUtils এটিকে সহজ এবং দ্রুত করতে সাহায্য করে।যদিও Apache Commons IO সরাসরি ফাইল কমপ্রেশন সমর্থন করে না, তবে Apache Commons Compress লাইব্রেরি একটি অত্যন্ত শক্তিশালী লাইব্রেরি যা gzip, zip, tar, bzip2 ইত্যাদি ফাইল ফরম্যাটের সাথে কাজ করার জন্য অনেক উন্নত ফিচার সরবরাহ করে।
.tar.gz
ফাইল তৈরিimport org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.compressors.gzip.*;
import java.io.*;
public class TarGzipCompressionExample {
public static void main(String[] args) {
File inputFile = new File("example.txt");
File outputTarGzFile = new File("example.tar.gz");
try (FileOutputStream fos = new FileOutputStream(outputTarGzFile);
GzipCompressorOutputStream gzipOut = new GzipCompressorOutputStream(fos);
TarArchiveOutputStream tarOut = new TarArchiveOutputStream(gzipOut)) {
tarOut.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
// ফাইল থেকে আর্কাইভ তৈরি করা
TarArchiveEntry tarEntry = new TarArchiveEntry(inputFile, inputFile.getName());
tarOut.putArchiveEntry(tarEntry);
try (FileInputStream fis = new FileInputStream(inputFile)) {
IOUtils.copy(fis, tarOut);
}
tarOut.closeArchiveEntry();
System.out.println("File compressed to .tar.gz format successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
File Compression করার জন্য Apache Commons IO লাইব্রেরি কিছু গুরুত্বপূর্ণ ইউটিলিটি সরবরাহ করে, তবে এটি মূলত stream-based operations এবং buffering techniques ব্যবহার করে ফাইল কমপ্রেশনকে সহজ করে তোলে। IOUtils
এবং FileUtils
ক্লাস ব্যবহার করে ফাইল ডেটা সহজে gzip বা zip ফরম্যাটে কমপ্রেস করা যেতে পারে।
তবে যদি আপনি আরও উন্নত ফাইল কমপ্রেশন এবং এক্সট্রাকশন (extraction) ফিচার চান, তাহলে Apache Commons Compress লাইব্রেরি ব্যবহার করা উচিত, যা বিভিন্ন ফাইল ফরম্যাটের জন্য উন্নত সমর্থন প্রদান করে।
অ্যাপাচি কমন্স আইও (Apache Commons IO) লাইব্রেরি Archive এবং Extract সম্পর্কিত কার্যক্রম সম্পাদন করার জন্য সরাসরি সমর্থন প্রদান না করলেও, এটি Apache Commons Compress লাইব্রেরির সাথে একত্রে ব্যবহার করতে সক্ষম, যা ফাইল আর্কাইভ এবং এক্সট্র্যাকশন কাজগুলো সহজ এবং কার্যকরী করে তোলে।
Apache Commons Compress একটি পৃথক লাইব্রেরি হলেও এটি অ্যাপাচি কমন্স আইও এর অংশ এবং আর্কাইভ তৈরি, এক্সট্র্যাকশন (বা আনজিপ) এবং বিভিন্ন ফাইল কমপ্রেশন ফরম্যাট (যেমন ZIP, TAR, GZIP, BZIP2, 7z ইত্যাদি) এর কাজ সহজভাবে করতে সহায়তা করে।
এখানে Apache Commons Compress এর মাধ্যমে Archive (ফাইল আর্কাইভ করা) এবং Extract (ফাইল এক্সট্র্যাক্ট করা) করার প্রক্রিয়া দেখানো হয়েছে।
ফাইল আর্কাইভ করার জন্য আপনি ZIP বা অন্য কোনো ফরম্যাট ব্যবহার করতে পারেন। সাধারণত ZipArchiveOutputStream
বা TarArchiveOutputStream
ক্লাস ব্যবহার করা হয় আর্কাইভ তৈরি করতে।
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ArchiveExample {
public static void main(String[] args) {
String zipFilePath = "example.zip";
String sourceFilePath = "example.txt"; // আপনার যেকোনো ফাইল
try (ZipArchiveOutputStream zipOut = new ZipArchiveOutputStream(new FileOutputStream(zipFilePath))) {
File sourceFile = new File(sourceFilePath);
try (FileInputStream fileIn = new FileInputStream(sourceFile)) {
// ZIP ফাইলের জন্য এন্ট্রি তৈরি
ZipArchiveEntry entry = new ZipArchiveEntry(sourceFile, sourceFile.getName());
zipOut.putArchiveEntry(entry);
byte[] buffer = new byte[1024];
int length;
while ((length = fileIn.read(buffer)) > 0) {
zipOut.write(buffer, 0, length);
}
zipOut.closeArchiveEntry();
}
System.out.println("File has been archived successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
এখানে:
ZipArchiveOutputStream
ব্যবহার করে একটি নতুন ZIP আর্কাইভ তৈরি করা হয়েছে।ZipArchiveEntry
ক্লাসটি ব্যবহার করে ফাইলের একটি এন্ট্রি তৈরি এবং আর্কাইভে যোগ করা হয়েছে।FileInputStream
এর মাধ্যমে ফাইলটি পড়া এবং ZIP আর্কাইভে সংরক্ষণ করা হয়েছে।আর্কাইভ ফাইল থেকে ডেটা এক্সট্র্যাক্ট করতে ZipArchiveInputStream ব্যবহার করা হয়। এছাড়া, অন্যান্য আর্কাইভ ফরম্যাট যেমন TAR বা GZ এর জন্যও যথাযথ ইনপুট স্ট্রিম ব্যবহার করতে হবে।
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ExtractExample {
public static void main(String[] args) {
String zipFilePath = "example.zip";
String outputDir = "output/"; // আর্কাইভ এক্সট্র্যাক্ট করার জন্য ডিরেক্টরি
try (ZipArchiveInputStream zipIn = new ZipArchiveInputStream(new FileInputStream(zipFilePath))) {
ZipArchiveEntry entry;
while ((entry = zipIn.getNextZipEntry()) != null) {
File outputFile = new File(outputDir + entry.getName());
// আর্কাইভের ফাইলটি এক্সট্র্যাক্ট করা
try (FileOutputStream fileOut = new FileOutputStream(outputFile)) {
byte[] buffer = new byte[1024];
int length;
while ((length = zipIn.read(buffer)) > 0) {
fileOut.write(buffer, 0, length);
}
System.out.println("Extracted: " + entry.getName());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
এখানে:
ZipArchiveInputStream
ব্যবহার করে ZIP আর্কাইভ থেকে ডেটা এক্সট্র্যাক্ট করা হচ্ছে।ZipArchiveEntry
এর মাধ্যমে আর্কাইভের ফাইলগুলো একে একে পড়া হচ্ছে এবং সেগুলিকে নির্দিষ্ট ডিরেক্টরিতে এক্সট্র্যাক্ট করা হচ্ছে।Apache Commons Compress আরও অন্যান্য আর্কাইভ ফরম্যাট সমর্থন করে, যেমন TAR, GZIP, BZIP2, 7z, ইত্যাদি। আপনি সহজেই অন্যান্য ফরম্যাটের আর্কাইভ তৈরি এবং এক্সট্র্যাক্ট করতে পারেন, যেমন:
TAR আর্কাইভ তৈরি করার জন্য TarArchiveOutputStream
এবং এক্সট্র্যাক্ট করার জন্য TarArchiveInputStream
ব্যবহার করতে হয়।
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TarArchiveExample {
public static void main(String[] args) {
String tarFilePath = "example.tar";
String sourceFilePath = "example.txt"; // আপনার ফাইল
try (TarArchiveOutputStream tarOut = new TarArchiveOutputStream(new FileOutputStream(tarFilePath))) {
File sourceFile = new File(sourceFilePath);
try (FileInputStream fileIn = new FileInputStream(sourceFile)) {
TarArchiveEntry entry = new TarArchiveEntry(sourceFile, sourceFile.getName());
tarOut.putArchiveEntry(entry);
byte[] buffer = new byte[1024];
int length;
while ((length = fileIn.read(buffer)) > 0) {
tarOut.write(buffer, 0, length);
}
tarOut.closeArchiveEntry();
}
System.out.println("TAR file created successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
এখানে:
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TarExtractExample {
public static void main(String[] args) {
String tarFilePath = "example.tar";
String outputDir = "output/";
try (TarArchiveInputStream tarIn = new TarArchiveInputStream(new FileInputStream(tarFilePath))) {
TarArchiveEntry entry;
while ((entry = tarIn.getNextTarEntry()) != null) {
File outputFile = new File(outputDir + entry.getName());
try (FileOutputStream fileOut = new FileOutputStream(outputFile)) {
byte[] buffer = new byte[1024];
int length;
while ((length = tarIn.read(buffer)) > 0) {
fileOut.write(buffer, 0, length);
}
System.out.println("Extracted: " + entry.getName());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
এখানে:
Apache Commons Compress লাইব্রেরি ফাইল আর্কাইভ এবং এক্সট্র্যাক্ট করার জন্য কার্যকরী সমাধান সরবরাহ করে। আপনি ZIP, TAR, GZIP, BZIP2, এবং অন্যান্য ফরম্যাটের আর্কাইভ তৈরি এবং এক্সট্র্যাক্ট করতে পারেন। এই লাইব্রেরির মাধ্যমে ফাইল আর্কাইভ করতে এবং ডেটা এক্সট্র্যাক্ট করার সময় সহজ এবং কার্যকরী কোড লেখা যায়, যা সাধারণত ফাইল পরিচালনা এবং ব্যাকআপ প্রক্রিয়ায় অত্যন্ত উপকারী।
Apache Commons IO লাইব্রেরি Java-তে I/O অপারেশনগুলির জন্য বিভিন্ন ইউটিলিটি সরবরাহ করে, যা বড় ফাইলের প্রসেসিং এবং পারফরম্যান্স অপটিমাইজেশন সম্পর্কিত কাজগুলোকে অনেক সহজ করে তোলে। বিশেষত, Large File Compression এবং Performance Optimization এই দুটি বিষয় অনেক ক্ষেত্রেই গুরুত্বপূর্ণ হয়ে দাঁড়ায় যখন বড় ডেটা সিস্টেমের সাথে কাজ করা হয়।
Large File Compression হল একটি প্রক্রিয়া যেখানে বড় আকারের ফাইলগুলো কমপ্রেস (সংকুচিত) করা হয়, যাতে তাদের স্টোরেজ স্থান কমে যায় এবং দ্রুত ট্রান্সফার বা স্টোরেজ হয়। কমপ্রেস করা ফাইলগুলোর সাইজ ছোট হওয়ায় ইন্টারনেটের মাধ্যমে দ্রুত ডেটা পাঠানো সম্ভব হয় এবং ফাইল সিস্টেমে স্থান সাশ্রয় হয়।
Apache Commons IO লাইব্রেরি FileUtils
এবং IOUtils
ক্লাসের মাধ্যমে বড় ফাইল কমপ্রেস করতে সাহায্য করে, তবে বড় ফাইলগুলোর ক্ষেত্রে Java's native compression libraries (যেমন java.util.zip
বা Apache Commons Compress
) আরও উপযোগী হতে পারে।
Apache Commons Compress হল Apache Commons IO পরিবারের অংশ এবং এটি ফাইল কমপ্রেস করার জন্য অনেক শক্তিশালী ক্লাস সরবরাহ করে, যেমন ZIP, GZIP, BZIP2, Tar ফাইল ফরম্যাটে কমপ্রেস করার জন্য। যদিও Apache Commons IO কমপ্রেসন সরাসরি সমর্থন করে না, Commons Compress ব্যবহার করে বড় ফাইল কমপ্রেস এবং আনকমপ্রেস করা সম্ভব।
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class LargeFileCompressionExample {
public static void main(String[] args) throws IOException {
File sourceFile = new File("largefile.txt");
File zipFile = new File("compressedfile.zip");
try (FileOutputStream fos = new FileOutputStream(zipFile);
ZipArchiveOutputStream zipOut = new ZipArchiveOutputStream(fos)) {
FileInputStream fis = new FileInputStream(sourceFile);
ZipArchiveEntry entry = new ZipArchiveEntry(sourceFile.getName());
zipOut.putArchiveEntry(entry);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) >= 0) {
zipOut.write(buffer, 0, length);
}
zipOut.closeArchiveEntry();
zipOut.finish();
fis.close();
}
System.out.println("File compressed successfully.");
}
}
এখানে:
ZipArchiveOutputStream
ব্যবহার করা হয়েছে যা ZIP ফাইল তৈরি করে এবং ZipArchiveEntry
ব্যবহার করে ফাইলের প্রতি এন্ট্রি যোগ করা হয়।FileInputStream
এবং ZipArchiveOutputStream
এর মধ্যে বাফারযুক্ত ডেটা পাঠানো হচ্ছে এবং ফাইল কমপ্রেস করা হচ্ছে।আউটপুট:
File compressed successfully.
ফাইলের বড় আকার এবং উচ্চ কর্মক্ষমতা প্রয়োজনীয়তার সাথে কাজ করার সময় performance optimization খুবই গুরুত্বপূর্ণ। কিছু সাধারণ টেকনিক্যাল কৌশল ব্যবহার করে বড় ফাইল প্রক্রিয়ার পারফরম্যান্স উন্নত করা যায়।
বড় ফাইলের ডেটা পড়া এবং লেখা সময় পারফরম্যান্স অপটিমাইজেশন করতে BufferedInputStream এবং BufferedOutputStream ব্যবহার করা যায়। এই স্ট্রিমগুলো ডেটার পড়া ও লেখাকে আরও দ্রুত করে তোলে, কারণ এটি ডেটা ব্লক আকারে প্রক্রিয়া করে এবং কম I/O অপারেশন ব্যবহার করে।
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedFileCopyExample {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("largefile.txt");
FileOutputStream fos = new FileOutputStream("copiedfile.txt");
try (BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
bos.write(buffer, 0, bytesRead);
}
}
System.out.println("File copied using Buffered Streams.");
}
}
এখানে:
BufferedInputStream
এবং BufferedOutputStream
ব্যবহার করা হয়েছে যা ফাইল কপি করার পারফরম্যান্স উন্নত করবে।আউটপুট:
File copied using Buffered Streams.
বড় ফাইল ম্যানিপুলেশন করার সময় memory management গুরুত্বপূর্ণ হয়ে ওঠে। যখন আপনি খুব বড় ফাইলের সাথে কাজ করছেন, তখন একবারে পুরো ফাইলটি মেমরিতে লোড করা উচিত নয়, কারণ এটি মেমরি ব্যবহার বাড়িয়ে দিতে পারে।
এক্ষেত্রে:
বড় ফাইল প্রক্রিয়ার সময় parallel processing ব্যবহার করা যেতে পারে, যাতে একাধিক থ্রেডের মাধ্যমে ফাইলের বিভিন্ন অংশ প্রক্রিয়া করা যায়। এটি পারফরম্যান্স উন্নত করতে সহায়তা করে।
Apache Commons IO লাইব্রেরি parallel streams সরাসরি সমর্থন না করলেও, আপনি Java 8 এর Streams API বা ExecutorService ব্যবহার করে multi-threaded file processing কৌশলগুলো প্রয়োগ করতে পারেন।
Apache Commons IO লাইব্রেরি Large File Compression এবং Performance Optimization এর জন্য প্রয়োজনীয় টুলস সরবরাহ করে। আপনি Apache Commons Compress লাইব্রেরি ব্যবহার করে বড় ফাইল কমপ্রেস করতে পারেন, এবং Buffered Streams ব্যবহার করে ফাইল রিড এবং রাইটের পারফরম্যান্স উন্নত করতে পারেন। বড় ফাইল প্রক্রিয়া করার সময় মেমরি ব্যবস্থাপনা এবং parallel processing কৌশল প্রয়োগ করলে কর্মক্ষমতা অনেক ভালো হয়। Apache Commons IO লাইব্রেরির সাহায্যে, বড় ফাইল কমপ্রেস এবং তার কার্যক্ষমতা অপটিমাইজ করা সহজ এবং দ্রুত।
common.read_more